﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Reporte.Plantillas.Problema
{
    public partial class FormatoGeneral_Problema : UserControl
    {
        public FormatoGeneral_Problema()
        {
            InitializeComponent();
        }

        private void chkUsuario_CheckedChanged(object sender, EventArgs e)
        {
            if (chkUsuario.Checked)
            {
                txtUsuario.Enabled = true;
                btnBuscar.Enabled = true;
            }
            else
            {
                txtUsuario.Enabled = false;
                txtUsuario.Tag = null;
                txtUsuario.ResetText();
                btnBuscar.Enabled = false;
            }            
        }

        private void chkSucursal_CheckedChanged(object sender, EventArgs e)
        {
            if (chkSucursal.Checked)
            {
                cmbSucursal.Enabled = true;
                ListarSucursal();
            }
            else
            {
                cmbSucursal.Enabled = false;
                cmbSucursal.DataSource = null;
            }
        }

        private void chkDepartamento_CheckedChanged(object sender, EventArgs e)
        {
            if (chkDepartamento.Checked)
            {
                cmbDepartamento.Enabled = true;
                ListarDepartamento();
            }
            else
            {
                cmbDepartamento.Enabled = false;
                cmbDepartamento.DataSource = null;
            }
        }

        private void chkEstado_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEstado.Checked)
            {
                cmbEstado.Enabled = true;
                ListarEstado();
            }
            else
            {
                cmbEstado.Enabled = false;
                cmbEstado.DataSource = null;
            }
        }

        private void chkAsistenteReparador_CheckedChanged(object sender, EventArgs e)
        {
            if (chkAsistenteReparador.Checked)
            {
                cmbAsistenteReparador.Enabled = true;
                ListarAsistenteReparador();
            }
            else
            {
                cmbAsistenteReparador.Enabled = false;
                cmbAsistenteReparador.DataSource = null;
            }
        }

        private void chkRegistrado_CheckedChanged(object sender, EventArgs e)
        {
            if (chkRegistrado.Checked)
            {
                txtFechaDesde.Enabled = true;
                txtFechaHasta.Enabled = true;
            }
            else
            {
                txtFechaDesde.Enabled = false;
                txtFechaDesde.ResetText();
                txtFechaHasta.Enabled = false;
                txtFechaHasta.ResetText();
            }
        }

        private void chkTipoProblema_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTipoProblema.Checked)
            {
                cmbTipoProblema.Enabled = true;
                ListarTipoProblema();
            }
            else
            {
                cmbTipoProblema.Enabled = false;
                cmbTipoProblema.DataSource = null;
            }
        }

        private void chkCaso_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCaso.Checked)
            {
                cmbCaso.Enabled = true;
                ListarCaso();
            }
            else
            {
                cmbCaso.Enabled = false;
                cmbCaso.DataSource = null;
            }
        }

        private void FormatoGeneral_Load(object sender, EventArgs e)
        {
            ListarEmpresa();
            ListarSucursal();
            ListarDepartamento();
            ListarEstado();
            ListarAsistenteReparador();
            ListarTipoProblema();
            ListarCaso();
        }

        private void ListarEmpresa()
        {
            LogicaNegocio.EmpresaBLL empresaBLL = new LogicaNegocio.EmpresaBLL();
            cmbEmpresa.DataSource = empresaBLL.Listar();
            cmbEmpresa.ValueMember = "ID";
            cmbEmpresa.DisplayMember = "NOMBREEMPRESA";
            cmbEmpresa.SelectedIndex = cmbEmpresa.Items.IndexOf(cmbEmpresa.Items.Cast<AccesoDatos.EMPRESA>().SingleOrDefault(x => x.NOMBREEMPRESA.Equals("Unimaq",StringComparison.CurrentCultureIgnoreCase)));
        }

        private void ListarSucursal()
        {
            if (cmbEmpresa.SelectedIndex >= 0)
            {
                LogicaNegocio.SucursalBLL sucursalBLL = new LogicaNegocio.SucursalBLL();
                cmbSucursal.DataSource = sucursalBLL.Listar(new AccesoDatos.EMPRESA() { ID = int.Parse(cmbEmpresa.SelectedValue.ToString())});
                cmbSucursal.ValueMember = "ID";
                cmbSucursal.DisplayMember = "CIUDAD";
                cmbSucursal.SelectedIndex = -1;
            }
        }

        private void ListarDepartamento()
        {
            LogicaNegocio.DepartamentoBLL departamentoBLL = new LogicaNegocio.DepartamentoBLL();
            cmbDepartamento.DataSource = departamentoBLL.Listar();
            cmbDepartamento.ValueMember = "ID";
            cmbDepartamento.DisplayMember = "NOMBREDEPARTAMENTO";
            cmbDepartamento.SelectedIndex = -1;
        }

        private void ListarEstado()
        {
            List<string> listaEstado = new List<string>();
            listaEstado.Add("Atendido");
            listaEstado.Add("Pendiente");
            listaEstado.Add("Rechazado");
            cmbEstado.DataSource = listaEstado;
            cmbEstado.SelectedIndex = -1;
        }

        private void ListarAsistenteReparador()
        {
            LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();
            cmbAsistenteReparador.DataSource = usuarioBLL.ListarAsistenteReparador();
            cmbAsistenteReparador.ValueMember = "ID";
            cmbAsistenteReparador.DisplayMember = "NOMBRECOMPLETO";
            cmbAsistenteReparador.SelectedIndex = -1;
        }

        private void ListarTipoProblema()
        {
            LogicaNegocio.TipoProblemaBLL tipoProblemaBLL = new LogicaNegocio.TipoProblemaBLL();
            cmbTipoProblema.DataSource = tipoProblemaBLL.Listar();
            cmbTipoProblema.ValueMember = "ID";
            cmbTipoProblema.DisplayMember = "TIPO_PROBLEMA";
            cmbTipoProblema.SelectedIndex = -1;
        }

        private void ListarCaso()
        {
            LogicaNegocio.CasoProblemaBLL casoProblemaBLL = new LogicaNegocio.CasoProblemaBLL();
            cmbCaso.DataSource = casoProblemaBLL.Listar();
            cmbCaso.ValueMember = "ID";
            cmbCaso.DisplayMember = "descripcion";
            cmbCaso.SelectedIndex = -1;
        }

        private void btnRepBuscar_Click(object sender, EventArgs e)
        {
            int? idUsuario = txtUsuario.Tag != null ? int.Parse(txtUsuario.Tag.ToString()) : new Nullable<int>();
            int? idDpto = cmbDepartamento.SelectedIndex >= 0 ? int.Parse(cmbDepartamento.SelectedValue.ToString()) : new Nullable<int>();
            int? idSucursal = cmbSucursal.SelectedIndex >= 0 ? int.Parse(cmbSucursal.SelectedValue.ToString()) : new Nullable<int>();
            int? idCaso = cmbCaso.SelectedIndex >= 0 ? int.Parse(cmbCaso.SelectedValue.ToString()) : new Nullable<int>();
            int? idReparador = cmbAsistenteReparador.SelectedIndex >= 0 ? int.Parse(cmbAsistenteReparador.SelectedValue.ToString()) : new Nullable<int>();
            int? idTipoProblema = cmbTipoProblema.SelectedIndex >= 0 ? int.Parse(cmbTipoProblema.SelectedValue.ToString()) : new Nullable<int>();
            string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

            DateTime valueDesde = new DateTime();
            DateTime.TryParse(txtFechaDesde.Text,out valueDesde);
            DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

            DateTime valueHasta = new DateTime();
            DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
            DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();
            
            LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
            DataTable dTable = problemaBLL.Rep_ListarProblema(idUsuario, idDpto, idSucursal, idCaso, idReparador, idTipoProblema, fechaRegistroDesde, fechaRegistroHasta, estado);

            FormularioReporte formReporte = this.ParentForm as FormularioReporte;

            if (formReporte != null)
            {
                formReporte.showRep_FormatoGeneral_Problema(dTable);
            }
        }
    }
}
